Debian 系相关
Table of Contents
1. 安装相关的问题
1.1. 安装时找不到一些硬件的驱动
官网下载的 ISO 映像里不带 nonfree 的固件。直接把这个 ISO 写到 U 盘进行安装,可能会导致安装过程中报找不到网卡、阵列卡等硬件的驱动的错误。
写入硬盘镜像到 U 盘之后。去官网下载 nonfree 固件的压缩包,名字类似这样的 debian_9_stretch_20200209_firmware.tar.gz
。官网下载下来的名字是 firmware.tar.gz
。
把里面的文件解压到 U 盘的 firmware 文件夹下。之后按照正常步骤安装。
sudo apt install -y apt-transport-https
装好包以后就能支持 https 传输协议了。
1.2. 系统日志报无法加载模块
DMS 模块无法加载:
Jan 30 22:55:46 j4105 kernel: i915 0000:00:02.0: firmware: failed to load i915/glk_dmc_ver1_04.bin (-2) Jan 30 22:55:46 j4105 kernel: firmware_class: See https://wiki.debian.org/Firmware for information about missing firmware Jan 30 22:55:46 j4105 kernel: i915 0000:00:02.0: Direct firmware load for i915/glk_dmc_ver1_04.bin failed with error -2 Jan 30 22:55:46 j4105 kernel: i915 0000:00:02.0: [drm] Failed to load DMC firmware i915/glk_dmc_ver1_04.bin. Disabling runtime power management. Jan 30 22:55:46 j4105 kernel: i915 0000:00:02.0: [drm] DMC firmware homepage: https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/tree/i915
搜索 Debian 软件包的内容,可以找到 glk_dmc_ver1_04
这个文件在 firmware-misc-nonfree
包中。
apt install firmware-misc-nonfree
可以解决问题。
1.3. 系统日志报无法加载驱动
比较常见的是螃蟹网卡没有驱动的问题。
$ dmesg | grep firmware [ 178.948233] r8169 0000:03:00.0: firmware: failed to load rtl_nic/rtl8168e-3.fw (-2) [ 178.948252] r8169 0000:03:00.0: Direct firmware load for rtl_nic/rtl8168e-3.fw failed with error -2 [ 178.948257] r8169 0000:03:00.0 enp3s0: unable to load firmware patch rtl_nic/rtl8168e-3.fw (-2)
non-free 源中的 firmware-realtek
包里包含了多数螃蟹网卡的驱动,使用 apt search firmware-realtek
查看包的详细信息, Description
部分描述了包内都有哪些驱动。
如果这个包内包含的驱动和网卡型号符合, apt install firmware-realtek
安装后重启系统,网卡驱动就能正常加载了。
1.4. 系统日志报需要升级 microcode
[Firmware Bug]: TSC_DEADLINE disabled due to Errata; please update microcode to version: 0xb2 (or later)
出现这个问题时,升级 BIOS 才是比较靠谱的做法。但在无法更新 BIOS 的时候,使用 apt install intel-microcode
( contrib 和 non-free 软件源内的包 ) 也可以更新 microcode,但重装系统之后 microcode 又回到了旧版。
2. 包管理问题
2.1. 本地软件源
安装系统用的 ISO 文件可作为本地软件源,在断网情况下提供部分软件的安装包。
执行 sudo mount -o loop </path/to/debian.iso> </path/to/mount_point>
挂载 ISO 文件。
执行 sudo mv /etc/apt/sources.list /etc/apt/sources.list.bak
备份源列表。
然后 sudo vim /etc/apt/sources.list
加入如下内容:
deb [trusted=yes] file://</path/to/mount_point> <system_name>
apt 本地源配置完成。
2.2. 网络软件源
先给个例子,清华大学的 Debian Buster 软件源会有如下内容:
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释 deb https://mirrors.tuna.tsinghua.edu.cn/debian/ buster main contrib non-free # deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ buster main contrib non-free deb https://mirrors.tuna.tsinghua.edu.cn/debian/ buster-updates main contrib non-free # deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ buster-updates main contrib non-free deb https://mirrors.tuna.tsinghua.edu.cn/debian/ buster-backports main contrib non-free # deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ buster-backports main contrib non-free deb https://mirrors.tuna.tsinghua.edu.cn/debian-security buster/updates main contrib non-free # deb-src https://mirrors.tuna.tsinghua.edu.cn/debian-security buster/updates main contrib non-free
源码镜像一般不用,注释了也没有问题。
在使用网络软件源升级系统后,系统内部可能会留下一些不再有用的链接。
sudo symlinks -r /usr | grep dangling
查找 /usr
目录下不再有用的链接。
sudo symlinks -r -d /usr
删除 /usr
目录下不再有用的链接。
2.2.1. backports 软件
注意第 6 7 两行:
deb https://mirrors.tuna.tsinghua.edu.cn/debian/ buster-backports main contrib non-free # deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ buster-backports main contrib non-free
它表示使用 backports 源,即 反向移植 的内容。
据 Debian 官方说法,这个 backports 里的包多数来自于 Debian 的 testing 版本。少数来自于 unstable 版本。
这些软件包经过调整和重新编译后可以在 Debian 稳定版中使用,但依旧存在与其他属于 stable 版本的软件发生冲突的可能。
谨慎使用这个源吧。
2.2.2. proposed-updates 软件
官方源也有一类软件放在 <version_name>-proposed-updates
下。
Debian 大版本 release 后还有小版本的更新,比如 10.1, 10.2, 10.3 等,这些 release 被称为 point release 。
这个 proposed-updates 的目的是为下一次的 point release 做准备工作。
也就是说,软件包下一次 point release 要发布的更新先放在 proposed-updates 中,积累到一定的量之后正式发布 point release。
使用 proposed-updates 软件源可以提前更新下个小版本的软件,也就只对软件更新的早晚产生影响。
所以,这个源可用可不用。
2.3. dpkg
2.3.1. 查看安装状态
dpkg -l | grep '<package_name>'
查看软件安装状态。
这时一般会出现有两个 ( 或者三个 ) 字母组成的 flag:
- 第一个字母: 所需的状态 desired package state ( selection state )
u
未知 unknowni
安装 installr
删除/卸载 remove / deinstallp
清除 ( 也删除配置文件 ) purge ( remove including config files )h
保持 hold
- 第二个字母: 当前包状态 current package state
n
未安装 not-installedi
已安装 installedc
仅安装配置文件 config-file` ( only the config files are installed )U
解包 unpackedF
由于某种原因配置失败 half-configured ( configuration failed for some reason )h
由于某种原因安装失败 half-installed ( installation failed for some reason )W
等待来自另一个包的触发器 triggers-awaited ( package is waiting for a trigger from another package )t
已被触发 triggers-pending ( package has been triggered )
- 第三个字母通常情况下是一个空格,看不到: 错误状态 error state
R
包破损,需要重新安装 reinst-required ( package broken, reinstallation required )
2.3.2. 安装与卸载
执行 sudo dpkg -i <package-file-name>.deb
完成安装。这里的 -i
表示 install。
执行 sudo dpkg -r <package-file-name>
移除软件包。
执行 dpkg -l | grep '<package-file-name>'
查看包安装状态。 rc
表示软件包已经删除 R emove,但配置文件 C onfig-file 还在。
执行 sudo dpkg -P <package-file-name>
彻底删除软件包。包括配置文件。
执行 sudo dpkg -l | grep "^rc" | awk '{print $2}' | xargs sudo dpkg -P
删除所有 rc 包的残余配置文件。
2.4. 显示最近安装的软件包
Linux 系统保存了所有发生事件的日志。可以参考最近安装软件包的日志。
- apt 命令的日志
grep " install " /var/log/apt/history.log
仅显示用 apt 命令安装的的程序,不会显示被依赖安装的软件包。
- dpkg 命令的日志
grep " install " /var/log/dpkg.log
显示所有的软件安装包,包括最近安装的过程中所依赖的软件包。
2.5. 缓存清理
2.5.1. 清理 apt 缓存文件
Debian 系系统在 /var/cache/apt/archives 中保留 deb 包的缓存文件。
sudo du -sh /var/cache/apt
查看当前缓存文件的空间占用情况。
sudo apt-get autoclean
清理过时的软件包。
sudo apt-get clean
移除所有 apt 缓存中的软件包。
上两条命令清理得不是非常干净,会残留 kb 级的缓存,但不过如果很久没清理的话,效果很好。
2.5.2. 删除不被依赖的包
sudo apt-get autoremove
移除系统不再需要的依赖库和软件包。
被删除的这些包是为了满足某个包的依赖关系,被自动安装的,此时已不再需要。这条命令也会删除系统中的 linux 旧内核 ( 有更精确的操作方法,但是操作比较麻烦,这里略过 )。
命令执行后,配置文件依旧在相应位置。
sudo apt-get autoremove --purge
可以同时清除软件包和软件的配置文件。
2.5.3. 清除残余配置文件
dpkg --list | grep "^rc"
查看残余的配置文件。结果是这样的:
mgz@albb:~$ dpkg --list | grep "^rc" rc linux-image-4.19.0-10-amd64 4.19.132-1 amd64 Linux 4.19 for 64-bit PCs (signed) rc linux-image-4.19.0-9-amd64 4.19.118-2+deb10u1 amd64 Linux 4.19 for 64-bit PCs (signed) rc ntp 1:4.2.8p12+dfsg-4 amd64 Network Time Protocol daemon and utility programs
rc 表示软件包已经删除 R emove,但配置文件 C onfig-file 还在。
执行 sudo dpkg -l | grep "^rc" | awk '{print $2}' | xargs sudo dpkg -P
删除所有 rc 包的残余配置文件。